package executor;

import java.awt.*;
import java.awt.image.*;

/**
* Funzioni di utilita' per rappresentare un colore in un singolo numero 
* intero di 4 byte.
* Tre byte contengono rispettivamente i valori di rosso, verde, blu, il
* rimanente byte non e' usato, convenzionalmente contiene tutti bit a 1.
*/

public class QuadColor
{
  /** Ritorna un oggetto colore da partire dal colore
   * memorizzato in un singolo intero.
   * @param rgb   il colore rappresentato su un singolo intero
   * @return      lo stesso colore come oggetto di classe java Color 
   */
  public static Color makeColor(int rgb)
  {
     int red = ( rgb >> 16 ) & 0xff;
     int green = ( rgb >> 8 ) & 0xff;
     int blue = ( rgb ) & 0xff;
     return new Color(red,green,blue);
  }

  /** Ritorna il singolo intero corrispondente a un oggetto colore. 
   * @param col   il colore come oggetto di classe java Color
   * @return      lo stesso colore rappresentato su un singolo intero
   */
  public static int makeColor(Color col)
  {
    int red = col.getRed();
    int green = col.getGreen();
    int blue = col.getBlue();
    return (255 << 24) | (red << 16) | (green << 8) | (blue);
  }

  /** Ritorna il singolo intero che rappresenta il colore di cui sono
   * dati i tre valori di rosso, verde, blu.
   * @param red   la componente rossa del colore
   * @param green la componente verde del colore
   * @param blue  la componente blu del colore
   * @return      lo stesso colore rappresentato su un singolo intero
   */
  public static int makeColor(int red, int green, int blue)
  {
    return (255 << 24) | (red << 16) | (green << 8) | (blue);
  }

  /** Ritorna la componente rossa del colore rappresentato dal singolo
   * intero.
   * @param rgb   il colore rappresentato su un singolo intero
   * @return      la componente rossa del colore
   */
  public static int getRed(int rgb)
  {  return ( rgb >> 16 ) & 0xff;  }
  
  /** Ritorna la componente verde del colore rappresentato dal singolo
   * intero.
   * @param rgb   il colore rappresentato su un singolo intero
   * @return      la componente verde del colore
   */
  public static int getGreen(int rgb)
  {  return ( rgb >> 8 ) & 0xff;  }

  /** Ritorna la componente blu del colore rappresentato dal singolo
   * intero.
   * @param rgb   il colore rappresentato su un singolo intero
   * @return      la componente blu del colore
   */
  public static int getBlue(int rgb)
  {  return ( rgb ) & 0xff;  }

}
